package space.lichenpark.unfamiliar.components.influx.util;

import cn.hutool.core.date.DateUtil;
import space.lichenpark.unfamiliar.components.influx.core.FluxQueryWrapper.Range;

import java.util.Date;

/**
 * 时间范围工具类
 *
 * @author lichen
 */
public class RangeUtil {

    private static final String NOW = "now()";

    /**
     * 获取时间范围
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Range
     */
    public static Range getRange(Date startTime, Date endTime) {
        return new Range(String.valueOf(startTime.getTime() / 1000), String.valueOf(endTime.getTime() / 1000));
    }

    /**
     * 获取时间范围
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Range
     */
    public static Range getRange(String startTime, String endTime, String format) {
        Date start = DateUtil.parse(startTime, format);
        Date end = DateUtil.parse(endTime, format);
        return getRange(start, end);
    }

    /**
     * 获取时间范围
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Range
     */
    private static Range getRange(String startTime, String endTime) {
        return new Range(startTime, endTime);
    }

    /**
     * 获取时间范围
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Range
     */
    public static Range getRange(long startTime, long endTime) {
        return getRange(new Date(startTime), new Date(endTime));
    }

    /**
     * 最近N秒
     *
     * @param seconds 秒数
     * @return Range
     */
    public static Range lastSeconds(int seconds) {
        return getRange(DateUtil.offsetSecond(new Date(), -seconds), new Date());
    }

    /**
     * 最近N分钟
     *
     * @param minutes 分钟数
     * @return Range
     */
    public static Range lastMinutes(int minutes) {
        return getRange("-" + minutes + "m", NOW);
    }

    /**
     * 最近N小时
     *
     * @param hours 小时数
     * @return Range
     */
    public static Range lastHours(int hours) {
        return getRange("-" + hours + "h", NOW);
    }

    /**
     * 最近N天
     *
     * @param days 天数
     * @return Range
     */
    public static Range lastDays(int days) {
        return getRange("-" + days + "d", NOW);
    }
}
